/**
 * 190128：增加execute的isRedo参数，用以标明是redo操作还是执行操作
  */

import CommandManager from './command-manager';

export default class Command{
    constructor(){
        this._redoFunc=()=>{};
        this._undoFunc=()=>{};
    }
    set redoFunc(func){
        this._redoFunc=func;
    }
    set undoFunc(func){
        this._undoFunc=func;
    }
    get execute(){
        return (isRedo=false)=> {
            this._execute();
            CommandManager.addUndo(this,isRedo);
        }
    }
    get undo(){
        return ()=> {
            this._undo();
            CommandManager.addRedo(this);
        }
    }
    get destroy(){
        return (()=>{
            this._dispose();
        })();
    }
    _dispose(){
        this._redoFunc=null;
        this._undoFunc=null;
    }
    _execute(){
        this._redoFunc();
    }
    _undo(){
        this._undoFunc();
    }
}